/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package managedbean;

import applicationexcepcion.AccountBannatoException;
import applicationexcepcion.AccountBloccatoException;
import applicationexcepcion.AccountLoginException;
import ejb.login.LoginLocal;
import entity.AddettoNegozio;
import entity.Amministratore;
import entity.Cliente;
import entity.Moderatore;
import entity.Persona;
import entity.Supervisore;
import java.io.Serializable;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.EJB;
import javax.faces.context.FacesContext;
import utility.ExceptionThrower;
import utility.ResourceBundleLoader;

/**
 *
 * @author Antonio
 */
public class Login implements Serializable {
    
    @EJB
    private LoginLocal login;
    private String email;
    private String password;
    private Persona persona;

    /**
     * Get the value of persona
     *
     * @return the value of persona
     */
    public Persona getPersona() {
        return persona;
    }

    /**
     * Set the value of persona
     *
     * @param persona new value of persona
     */
    public void setPersona(Persona persona) {
        this.persona = persona;
    }

    /**
     * Get the value of password
     *
     * @return the value of password
     */
    public String getPassword() {
        return password;
    }

    /**
     * Set the value of password
     *
     * @param password new value of password
     */
    public void setPassword(String password) {
        this.password = password;
    }

    /**
     * Get the value of email
     *
     * @return the value of email
     */
    public String getEmail() {
        return email;
    }

    /**
     * Set the value of email
     *
     * @param email new value of email
     */
    public void setEmail(String email) {
        this.email = email;
    }
    
    public String accesso(GestioneCliente gestioneCliente, GestioneSito gestioneSito, GestioneNegozio gestioneNegozio) {
        
        FacesContext fc = FacesContext.getCurrentInstance();
        ResourceBundle rb = ResourceBundleLoader.getResourceBundle(fc);
        try {
            
            persona = login.accesso(email, password);
            
            Redirect.setAccesso(true);
            Redirect.setPersona(persona);
            
            if (persona instanceof Supervisore) {

                // passo il supervisore al suo pannello
                gestioneSito.setNomeSupervisore(persona.getNome());
                gestioneSito.setIdSupervisore(persona.getId());
                return "AccessoSpeciale";
            } else if (persona instanceof Moderatore) {

                // passo il moderatore al suo pannello
                gestioneSito.setNomeModeratore(persona.getNome());
                gestioneSito.setIdModeratore(persona.getId());
                return "AccessoSpeciale";
            } else if (persona instanceof Amministratore) {

                // passo l'amministratore al suo pannello
                gestioneSito.setIdAmministratore(persona.getId());
                gestioneSito.setNomeAmministratore(persona.getNome());
                return "AccessoSpeciale";
            } else if (persona instanceof AddettoNegozio) {

                // passo l'addetto al negozio al suo pannello
                gestioneNegozio.setIdAddetto(persona.getId());
                gestioneNegozio.setNomeAddetto(persona.getNome());
                gestioneNegozio.setidNegozio(((AddettoNegozio) persona).getNegozio().getId());
                return "AccessoNegozio";
            }

            // passo il cliente al suo pannello
            gestioneCliente.setId(persona.getId());
            gestioneCliente.setNome(persona.getNome());
            gestioneCliente.setProvincia(((Cliente) persona).getComune().getProvincia());
            gestioneCliente.setComune(((Cliente) persona).getComune());
            return "AccessoCliente";
            
        } catch (AccountLoginException ex) {
            
            Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex);
            ExceptionThrower.throwMessageError(fc, rb, "accessoLoginM");
            return "";
        } catch (AccountBannatoException ex) {
            
            Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex);
            ExceptionThrower.throwMessageError(fc, rb, "utenteBannatoLoginM");
            return "";
        } catch (AccountBloccatoException ex) {
            
            Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex);
            ExceptionThrower.throwMessageError(fc, rb, "utenteBloccatoLoginM");
            return "";
        } catch (NullPointerException ex) {
            
            Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex);
            Redirect.setAccesso(false);
            return "";
        }
        
    }// accesso

    public String registraUtente() {
        
        return "RegistraUtente";
    }// registraUtente

    /**
     * Creates a new instance of Login
     */
    public Login() {
    }
}
